package cn.tedu.bigdecimal;
/*本类用于解决浮点数运算不精确的问题*/
import java.math.BigDecimal;
import java.util.Scanner;

public class TestBigDecimal {
    public static void main(String[] args) {

        //f1();
        //f2();
        f3();
    }

    private static void f3() {
        System.out.println("请输入两个小数");
        double d1=new Scanner(System.in).nextDouble();
        double d2=new Scanner(System.in).nextDouble();
        /*注意：不用double参数的构造方法
        因为还是不精确的结果，要使用参数类型为String的构造方法
        double转string，直接拼接空串就可以！
         */
        BigDecimal bd1=new BigDecimal(d1+"");
        BigDecimal bd2=new BigDecimal(d2+"");
        BigDecimal bd3;
        bd3=bd1.add(bd2);
        System.out.println(bd3);
        bd3=bd1.subtract(bd2);
        System.out.println(bd3);
        bd3=bd1.multiply(bd2);
        System.out.println(bd3);
        bd3=bd1.divide(bd2);
        System.out.println(bd3);
        /*由于除法会出现除不尽的现象，数据仍然没办法精确展示，所以我们需要提前设置除不尽时：保留位数以及舍入规则*/
        bd3=bd1.divide(bd2,3,BigDecimal.ROUND_HALF_UP);
        System.out.println(bd3);
    }

    private static void f2() {
        System.out.println("请输入两个小数");
        double d1=new Scanner(System.in).nextDouble();
        double d2=new Scanner(System.in).nextDouble();
        BigDecimal bd1=new BigDecimal(d1);
        BigDecimal bd2=new BigDecimal(d2);
        /*注意：不用double参数的构造方法
        因为还是不精确的结果，要使用参数类型为String的构造方法
        double转string，直接拼接空串就可以！
         */
        BigDecimal bd3;
        bd3=bd1.add(bd2);
        System.out.println(bd3);
        bd3=bd1.subtract(bd2);
        System.out.println(bd3);
        bd3=bd1.multiply(bd2);
        System.out.println(bd3);
//        bd3=bd1.divide(bd2);
//        System.out.println(bd3);

    }

    private static void f1() {
        System.out.println("请输入两个小数");
        double d1=new Scanner(System.in).nextDouble();
        double d2=new Scanner(System.in).nextDouble();
        System.out.println(d1+d2);
        System.out.println(d1-d2);
        System.out.println(d1*d2);
        System.out.println(d1/d2);
    }
}
